home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / BGSCR.C < prev    next >
Text File  |  2000-03-25  |  7KB  |  194 lines

  1. /*
  2.  *        地形処理ルーチン
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <iocslib.h>
  7. #include <doslib.h>
  8. #include <io.h>
  9. #include "SPASSION.H"
  10. #include "BG.H"
  11. #include "SUB.H"
  12.  
  13. unsigned short bg_map1[32 * 32 * 6];
  14. unsigned short bg_map2[32 * 32 * 6];
  15. unsigned short bg_map3[32 * 32 * 6];
  16. unsigned short bg_map4[32 * 32 * 6];
  17.  
  18. /* BGごとの当たり判定
  19. * 0:なし
  20. * 1:破壊不可
  21. * 2:破壊可
  22.  */
  23. char bg_hit1[256]={
  24. /*  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F*/
  25.     0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0, 0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,0,0,0,1,1,1,1,1,0,1,0,1,1,1, 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
  26.     0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
  27.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  28.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  29. };
  30. char bg_hit2[256]={
  31. /*  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F*/
  32.     0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1, 1,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  33.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  34.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  35.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  36. };
  37. char bg_hit3[256]={
  38. /*  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F*/
  39.     0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0, 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  40.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  41.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  42.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  43. };
  44. char bg_hit4[256]={
  45. /*  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F  0 1 2 3 4 5 6 7 8 9 A B C D E F*/
  46.     0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  47.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  48.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  49.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  50. };
  51. char *bg_hit[STAGES]={
  52.     bg_hit1,bg_hit2,bg_hit3,bg_hit4
  53. };
  54.  
  55. /******************************
  56.     マップデータ読み込み
  57. ******************************/
  58. int        LoadMapFile (char *fname, void *ptr, int size, int n)
  59. {
  60.     FILE *fp;
  61.     int i;
  62.     void    game_end( void );
  63.  
  64.     if ((fp = fopen (fname, "rb")) == NULL) {
  65.         static char e[256];
  66.         error_level = ERROR_FILE;
  67.         error_message = e;
  68.         sprintf(e, "\nファイル %s が読み込めません\n"
  69.                     "強制終了します。\n"
  70.         , fname);
  71.         game_end();
  72.     }
  73.     /* .mapファイルは最初の方にマップの情報(大きさ等)が入っているので飛ばす */
  74.     fseek(fp, 30, 0);
  75.     i = fread(ptr, size, n, fp);
  76.     fclose (fp);
  77.     map_width=32*6;map_height=64;        /* 今回は固定 */
  78.  
  79.     return (i);        /* 返り値は読み込みバイト数 */
  80. }
  81. /*********************************************************
  82.     全画面BGを書く。
  83.     注意)画面の消えている時に使用のこと
  84. *********************************************************/
  85. void SetBG( short st_x, short st_y )
  86. {
  87.     short    x,y;
  88.  
  89.     for(y=0;y<33;y++){
  90.         for(x=0;x<32;x++){
  91.             BGTEXTST(1,(st_x+x)&63,(st_y+y)&63,GetBG(st_x+x,st_y+y));
  92.         }
  93.     }
  94.     BGSCRLST( 1,(st_x*8)&0x1FF,(st_y*8)&0x1FF );
  95. }
  96. /*::::::::::::::: 画面スクロール*/
  97. void ScrollBG( void )
  98. {
  99.     void    t_roll(short zz);
  100.  
  101.     if( map_vx>0 )
  102.         t_roll(2);
  103.     else if( map_vx<0 )
  104.         t_roll(1);
  105.     if( map_vy>0  )
  106.         t_roll(3);
  107.     else if( map_vy<0 )
  108.         t_roll(0);
  109. /*    BGSCRLST( 1,(map_x>>16)&0x1FF,(map_y>>16)&0x1FF );*/
  110. }
  111. /*********************************************************
  112.     現在の位置(map_x,map_y)からzzの方向のBGを書く。
  113.         map_x,map_y が参照されます
  114.         zz:向き
  115. *********************************************************/
  116. void    t_roll(short zz)
  117. {
  118.     short    i,x,y;
  119.  
  120.     x=(map_x>>16)/8;
  121.     y=(map_y>>16)/8;
  122.  
  123.     switch (zz){
  124.     case(2):/*みぎ*/
  125.         for(i=31;i>=0;i--){
  126.             BGTEXTST(1,(x+32)&63,(y+i)&63,GetBG(x+32,y+i));
  127. /*            BGTEXTST(1,(x+33)&63,(y+i)&63,GetBG(x+33,y+i));*/
  128.         }
  129.         break;
  130.     case(1):/*ひだり*/
  131.         for(i=31;i>=0;i--){
  132. /*            BGTEXTST(1,(x+62)&63,(y+i)&63,GetBG(x-2,y+i));*/
  133.             BGTEXTST(1,(x+63)&63,(y+i)&63,GetBG(x-1,y+i));
  134.         }
  135.     case(3):/*うえ*/
  136.         for(i=31;i>=0;i--){
  137.             BGTEXTST(1,(x+i)&63,(y+62)&63,GetBG(x+i,y-2));
  138.             BGTEXTST(1,(x+i)&63,(y+63)&63,GetBG(x+i,y-1));        /*一応、次のも書いておく*/
  139.         }
  140.         break;
  141.     case(0):/*した*/
  142.         for(i=31;i>=0;i--){
  143.             BGTEXTST(1,(x+i)&63,(y+32)&63,GetBG(x+i,y+32));
  144.             BGTEXTST(1,(x+i)&63,(y+33)&63,GetBG(x+i,y+33));
  145.         }
  146.         break;
  147.     }
  148.         /* ここでは、向き別に分けてみました。スクロールする方向の
  149.         ! まだ見えていない1行32個を書いています
  150.         */
  151. }
  152.  
  153.  
  154. /*********************************************************
  155.     指定座標のBGを返す
  156. [戻り値] bgのデータ
  157. *********************************************************/
  158. unsigned short    GetBG(short x, short y)
  159. {
  160.     if ( x<0 || y<0 || x>=map_width || y>=map_height ){
  161.         /* 座標が、マップデータ外を指定していたら 「まっくろ」なBGを返す*/
  162.         return( 0x100 );
  163.     }
  164.     return( bg_map[stage][x+y*map_width] );
  165.         /* このように座標によってbgを返す関数を作っておくと便利*/
  166. }
  167.  
  168. /*
  169.  *        地形の当たり判定をみる
  170.  */
  171. char    CheckBGHit(short x,short y)
  172. {
  173.     unsigned char    i;
  174.  
  175.     i=bg_map[stage][(x+(map_x>>16))/8+y/8*map_width]&0xFF;
  176.         /*スプライトの座標をBGの座標に変換しそこのBG
  177.         ! ナンバーを見てます
  178.         */
  179.  
  180.     return (bg_hit[stage][i]);
  181. }
  182.  
  183.  
  184. /*
  185.  *        BGに書かれているキャラクターを空白にする
  186.  */
  187. void    BreakBG( short x, short y )
  188. {
  189.     short            xx=(x+(map_x>>16))/8,yy=y/8;
  190.  
  191.     bg_map[stage][xx+yy*map_width] = 0x100;
  192.     BGTEXTST( 1, xx&63, yy, 0x100 );
  193. }
  194.